package DataStructure;

import java.util.ArrayList;
import java.util.List;

/**
 * 这个类用来表示一个树
 */
public class Tree {
    //树节点集合
    private List<TreeNode> nodeList;
    //树根的在list中的编号
    private int rootIndex;

    public Tree(){
        nodeList=new ArrayList<>();
    }

    /**
     * 插入树节点
     * @param node 节点
     * @param nodeIndex 节点的编号
     */
    public void insertNode(TreeNode node,int nodeIndex){
        nodeList.add(nodeIndex,node);
    }

    /**
     * 获得树节点
     * @param nodeIndex 节点的编号
     * @return 树节点
     */
    public TreeNode getNode(int nodeIndex){
        return nodeList.get(nodeIndex);
    }

    /**
     * 设置根节点的编号
     * @param rootIndex 根急节点的编号
     */
    public void setRootIndex(int rootIndex) {
        this.rootIndex = rootIndex;
    }

    /**
     * 获得根节点编号
     * @return 根节点编号
     */
    public int getRootIndex(){
        return rootIndex;
    }

    /**
     * 将树节点的遍历标识设置为未遍历（false）
     */
    public void refreshNode(){
        for(TreeNode node:nodeList){
            node.setViewed(false);
        }
    }

    public List<TreeNode> getAllNode(){
        return nodeList;
    }

    public String[] toStringArray(){
        String[] array=new String[2];
        StringBuilder builder=new StringBuilder();
        for(TreeNode node:nodeList){
            builder.append(node.toString());
            builder.append("%");
        }
        array[0]=builder.toString();
        array[0]=array[0].substring(0,array[0].length()-1);
        array[1]=String.valueOf(rootIndex);
        return array;
    }
}
